package com.j1903.service.impl;

import com.j1903.bean.Goods;
import com.j1903.bean.Goodscategory;
import com.j1903.mapper.GoodsMapper;
import com.j1903.mapper.GoodscategoryMapper;
import com.j1903.service.GoodscategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.j1903.vo.TopCateGroup;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;

/**
 * <p>
 * 分类表 服务实现类
 * </p>
 *
 * @author fyq
 * @since 2021-12-13
 */
@Service
public class GoodscategoryServiceImpl extends ServiceImpl<GoodscategoryMapper, Goodscategory> implements GoodscategoryService {
    @Resource
    private GoodscategoryMapper goodscategoryDao;
    @Resource
    private GoodsMapper goodsMapper;
    @Override
    public List<Goodscategory> lists(Goodscategory obj) {
        return goodscategoryDao.lists(obj);
    }

    @Override
    public Map<String, List<TopCateGroup>> getWithSub(Goodscategory obj) {
        List<Goodscategory> tops=this.lists(obj);
        Map<String,List<TopCateGroup>> map=new HashMap<>();
        Map<String,List<TopCateGroup>> newMap=
                new HashMap<>();
        if(tops!=null&&tops.size()>0){
            for (int i = 0; i < tops.size(); i++) {
                String key=tops.get(i).getCateName();
                List<TopCateGroup> tcgList=new ArrayList<>();
                //1.创建一个vo包，在这个包下创建一个TopCateGroup
                //属性包括id,cgName,imgPath,flag
                //2.给商品分类表增加图片字段imgPath
                //3.先查出1级分类下的二级分类哪些是推荐的,把结果
                //封装在TopCateGroup类的List中
                //查询相关联的二级分类
                List<Goodscategory> second=
                        this.lists(new Goodscategory(tops.get(i).getId()));
                if(second.size()>0){
                    //把查询出来的二级分类转换为TopCateGroup对象
                    for (Goodscategory gc:second) {
                        tcgList.add(new TopCateGroup(
                                gc.getId(),
                                gc.getCateName(),
                                gc.getLogo(), 1));
                    }
                }
                //查询顶级分类关联的商品
                List<Goods> subGoods=
                        goodsMapper.lists(new Goods(tops.get(i).getId()));
                if(subGoods.size()>0){
                    for (Goods g:subGoods) {
                        tcgList.add(new TopCateGroup(
                                g.getId(),
                                g.getGoodsName(),
                                g.getImgPath(), 1));
                    }
                }
                //4.封装list到Map里面去
                map.put(tops.get(i).getCateName(), tcgList);
            }

            newMap.put("手机", map.get("手机"));
            newMap.put("电视", map.get("电视"));
            newMap.put("笔记本 平板", null);
            newMap.put("家电", map.get("家电"));
            newMap.put("出行 穿戴", null);
            newMap.put("智能 路由器", null);
            newMap.put("电源 配件", null);
            newMap.put("健康 儿童", null);
            newMap.put("耳机 音箱", null);
            newMap.put("生活 箱包", null);

            //判断并合并分类
            for (Map.Entry<String,List<TopCateGroup>> entry:
                    map.entrySet()) {
                if(entry.getKey().equals("笔记本")||
                        entry.getKey().equals("平板")){
                    if(newMap.get("笔记本 平板")==null){
                        newMap.put("笔记本 平板",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("笔记本 平板").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("出行")||
                        entry.getKey().equals("穿戴")){
                    if(newMap.get("出行 穿戴")==null){
                        newMap.put("出行 穿戴",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("出行 穿戴").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("智能")||
                        entry.getKey().equals("路由器")){
                    if(newMap.get("智能 路由器")==null){
                        newMap.put("智能 路由器",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("智能 路由器").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("电源")||
                        entry.getKey().equals("配件")){
                    if(newMap.get("电源 配件")==null){
                        newMap.put("电源 配件",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("电源 配件").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("健康")||
                        entry.getKey().equals("儿童")){
                    if(newMap.get("健康 儿童")==null){
                        newMap.put("健康 儿童",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("健康 儿童").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("耳机")||
                        entry.getKey().equals("音箱")){
                    if(newMap.get("耳机 音箱")==null){
                        newMap.put("耳机 音箱",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("耳机 音箱").add(tcg2);
                        }
                    }
                }
                else if(entry.getKey().equals("生活")||
                        entry.getKey().equals("箱包")){
                    if(newMap.get("生活 箱包")==null){
                        newMap.put("生活 箱包",entry.getValue());
                    }else{
                        for (TopCateGroup tcg2:entry.getValue()) {
                            newMap.get("生活 箱包").add(tcg2);
                        }
                    }
                }
            }
        }
        return newMap;
    }

    @Override
    public IPage<Goodscategory> pages(
            IPage<Goodscategory> page, Goodscategory obj) {
        return goodscategoryDao.pages(page, obj);
    }
}
